from datetime import datetime
from app import db
from app.models import Note

class NoteService:
    """
    服务类，用于处理与笔记相关的业务逻辑。
    """

    @staticmethod
    def create_note(user_id, content, ai_response=None, ai_style=None):
        """
        创建一条新的笔记。

        :param user_id: 用户 ID
        :param content: 笔记内容
        :param ai_response: （可选）AI 生成的响应
        :param ai_style: （可选）AI 风格
        :return: 创建的 Note 对象
        """
        note = Note(
            uid=user_id,
            content=content,
            ai_response=ai_response,
            ai_style=ai_style
        )
        db.session.add(note)
        db.session.commit()
        return note

    @staticmethod
    def get_user_notes(user_id):
        """
        获取用户的所有笔记。

        :param user_id: 用户 ID
        :return: 用户的所有笔记列表
        """
        return Note.query.filter_by(uid=user_id).all()

    @staticmethod
    def get_note(user_id, note_id):
        """
        根据用户 ID 和笔记 ID 获取单条笔记。

        :param user_id: 用户 ID
        :param note_id: 笔记 ID
        :return: 笔记对象或 None
        """
        return Note.query.filter_by(id=note_id, uid=user_id).first()

    @staticmethod
    def update_note(note, content, ai_response=None, ai_style=None):
        """
        更新笔记内容。

        :param note: 要更新的 Note 对象
        :param content: 新的笔记内容
        :param ai_response: （可选）新的 AI 响应
        :param ai_style: （可选）新的 AI 风格
        :return: 更新后的 Note 对象
        """
        note.content = content
        if ai_response is not None:
            note.ai_response = ai_response
        if ai_style is not None:
            note.ai_style = ai_style
        note.update_time = datetime.utcnow()
        db.session.commit()
        return note

    @staticmethod
    def delete_note(note):
        """
        删除指定的笔记。

        :param note: 要删除的 Note 对象
        """
        db.session.delete(note)
        db.session.commit()

    @staticmethod 
    def search_notes(user_id, keyword: str):
        """
        根据关键字搜索用户的笔记。

        :param user_id: 用户 ID
        :param keyword: 搜索关键字
        :return: 符合条件的笔记列表
        """
        return Note.query.filter(Note.uid == user_id, Note.content.ilike(f"%{keyword}%")).all()